/* EncerramentoDAO.java
*  Criado em 14/03/2006
*
*/
package br.com.werp.regras.contabilidade.integracao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.util.ArrayList;
import java.util.List;
import java.util.ResourceBundle;

import br.com.werp.regras.geral.Debuger;
import br.com.werp.regras.geral.integracao.MasterDAO;
import br.com.werp.regras.geral.util.BeanUtil;
import br.com.werp.regras.geral.util.Constantes;
import br.com.werp.regras.geral.util.Dia;
import br.com.werp.regras.geral.vos.contabilidade.EncerramentoContaVO;
import br.com.werp.regras.geral.vos.tabelas.Encerramento;
import br.com.werp.regras.geral.vos.tabelas.Encerramento_conta;


/**
 * @author Rafael Carneiro - <a href = "mailto:rafael@portaljava.com">
 * rafael@portaljava.com</a>
 */
public class EncerramentoDAO extends MasterDAO {
    private static final String APAGAR_ENCERRAMENTO = "APAGAR_ENCERRAMENTO";
    private static final String APAGAR_ENCERRAMENTO_CONTA = "APAGAR_ENCERRAMENTO_CONTA";
    private static final String APAGAR_ENCERRAMENTO_CONTA_ID = "APAGAR_ENCERRAMENTO_CONTA_ID";
    public static EncerramentoDAO encerramentoDAO;

    private EncerramentoDAO(String banco) throws Exception {
        super(banco);
    }

    public static EncerramentoDAO getEncerramentoDAO()
        throws Exception {
        if (encerramentoDAO == null) {
            ResourceBundle bundle = ResourceBundle.getBundle(Constantes.CONFIG);
            encerramentoDAO = new EncerramentoDAO(bundle.getString(
                        Constantes.BANCO));
        }

        return encerramentoDAO;
    }

    public void inserirEncerramento(Encerramento encerramento, Object key)
        throws Exception {
        Connection conn = validarTransacao(key);
        inserirVO(conn, encerramento);
    }

    public void inserirEncerramentoConta(
        Encerramento_conta encerramento_conta, Object key)
        throws Exception {
        Connection conn = validarTransacao(key);
        inserirVO(conn, encerramento_conta, new String[] { "enct_id" });
    }

    public List pesquisarEncerramento(Encerramento encerramento)
        throws Exception {
        Connection conn = getConexao();

        try {
            String where = "";

            if (!"".equals(encerramento.getEncr_data()) &&
                    (encerramento.getEncr_data() != null)) {
                where += (" and encr_data like " +
                (new Dia(encerramento.getEncr_data()).getDataBanco()));
                encerramento.setEncr_data(null);
            }

            return pesquisarVO(conn, encerramento, where);
        } finally {
            liberaConeccao(conn);
        }
    }

    public void excluirEncerramento(Object conn, int encr_id)
        throws Exception {
        Connection connection = validarTransacao(conn);
        String query = getQuery(APAGAR_ENCERRAMENTO_CONTA);
        PreparedStatement statement = connection.prepareStatement(query);
        setInt(1, statement, encr_id);
        Debuger.debugar(statement, getClass());
        statement.executeUpdate();
        query = getQuery(APAGAR_ENCERRAMENTO);
        statement = connection.prepareStatement(query);
        setInt(1, statement, encr_id);
        Debuger.debugar(statement, getClass());
        statement.executeUpdate();
    }

    public List pesquisarEncerramentoConta(
        EncerramentoContaVO encerramentoContaVO) throws Exception {
        Connection conn = getConexao();

        try {
            String tabela = "encerramento,encerramento_conta";
            String where = " and encr_id = enct_encerramento ";

            if (!"".equals(encerramentoContaVO.getEncr_data()) &&
                    (encerramentoContaVO.getEncr_data() != null)) {
                where += (" and encr_data like " +
                (new Dia(encerramentoContaVO.getEncr_data()).getDataBanco()));
                encerramentoContaVO.setEncr_data(null);
            }

            where += " order by encr_data ";

            List propridedadeExibiveis = new ArrayList();
            propridedadeExibiveis.addAll(BeanUtil.listarPropriedades(
                    new Encerramento()));
            propridedadeExibiveis.addAll(BeanUtil.listarPropriedades(
                    new Encerramento_conta()));

            return pesquisarVO(conn, encerramentoContaVO, where, tabela,
                propridedadeExibiveis);
        } finally {
            liberaConeccao(conn);
        }
    }

    public void deletarEncerramentoConta(Object tranx, int encr_id)
        throws Exception {
        Connection conn = validarTransacao(tranx);
        String query;
        PreparedStatement statement;

        query = getQuery(APAGAR_ENCERRAMENTO_CONTA_ID);
        statement = conn.prepareStatement(query);
        setInt(1, statement, encr_id);
        Debuger.debugar(statement, getClass());
        statement.executeUpdate();
    }
}
